package com.filestation.backend.service;

import com.filestation.backend.entity.FileInfo;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

public interface FileService {

    /**
     * 上传文件
     * @param file 文件对象
     * @param expirationDays 过期天数
     * @param description 文件描述
     * @param request HTTP请求
     * @return 文件信息
     */
    FileInfo uploadFile(MultipartFile file, Integer expirationDays, String description, HttpServletRequest request);

    /**
     * 上传多个文件并压缩
     * @param files 文件列表
     * @param zipName 压缩文件名
     * @param expirationDays 过期天数
     * @param description 文件描述
     * @param request HTTP请求
     * @return 压缩后的文件信息
     */
    FileInfo uploadMultipleFiles(List<MultipartFile> files, String zipName, Integer expirationDays, String description, HttpServletRequest request);

    /**
     * 通过文件Key获取文件信息
     * @param fileKey 文件Key
     * @return 文件信息
     */
    FileInfo getFileByKey(String fileKey);

    /**
     * 通过下载码获取文件信息
     * @param downloadCode 下载码
     * @return 文件信息
     */
    FileInfo getFileByDownloadCode(String downloadCode);

    /**
     * 删除文件
     * @param fileKey 文件Key
     * @return 是否成功
     */
    boolean deleteFile(String fileKey);

    /**
     * 递增下载次数
     * @param fileId 文件ID
     */
    void incrementDownloadCount(Long fileId);

    /**
     * 获取所有未删除的文件
     * @return 文件列表
     */
    List<FileInfo> getAllFiles();

    /**
     * 清理过期文件
     */
    void cleanExpiredFiles();
} 